"""
Django5Pro3 项目的设置。
使用 Django 5.1.3 通过 'django-admin startproject' 命令生成。
有关此文件的更多信息，请参见
https://docs.djangoproject.com/en/5.1/topics/settings/
有关所有设置及其值的完整列表，请参见
https://docs.djangoproject.com/en/5.1/ref/settings/
"""

from pathlib import Path

# 在项目内部构建路径，例如：BASE_DIR / 'subdir'。
BASE_DIR = Path(__file__).resolve().parent.parent

# 快速启动开发设置 - 不适合生产环境
# 请参见 https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/

# 安全警告：在生产环境中保持使用的密钥秘密！
SECRET_KEY = 'django-insecure-v9_fw71z9&!vj4o2xzro==b!y+(tc22h9hw3q019p-$(u^q0j3'

# 安全警告：在生产环境中不要开启调试模式！
DEBUG = True

# 允许的主机列表，空列表表示允许任何主机
ALLOWED_HOSTS = []

# 应用定义

# 已安装的应用列表
# 定义Django项目中安装的应用列表
INSTALLED_APPS = [
    # 1.项目内置应用
    # 包含Django自带的admin后台管理应用
    'django.contrib.admin',
    # 包含Django自带的用户认证应用
    'django.contrib.auth',
    # 包含Django自带的内容类型应用，用于权限管理
    'django.contrib.contenttypes',
    # 包含Django自带的会话管理应用
    'django.contrib.sessions',
    # 包含Django自带的消息框架应用
    'django.contrib.messages',
    # 包含Django自带的静态文件管理应用
    'django.contrib.staticfiles',
    # 2.项目自定义的应用配置
    # 包含项目自定义的应用app1的配置类
    "app1.apps.App1Config",
    "user.apps.UserConfig",
    "order.apps.OrderConfig"
]

# 中间件列表
# 定义Django项目的中间件列表
MIDDLEWARE = [
    # 1.系统中间件
    # 安全中间件，用于设置安全相关的HTTP头部
    'django.middleware.security.SecurityMiddleware',
    # 会话中间件，用于管理用户会话
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 常用中间件，用于处理常见的HTTP头部
    'django.middleware.common.CommonMiddleware',
    # CSRF保护中间件，用于防止跨站请求伪造攻击
    'django.middleware.csrf.CsrfViewMiddleware',
    # 身份验证中间件，用于处理用户身份验证
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 消息中间件，用于处理消息框架
    'django.contrib.messages.middleware.MessageMiddleware',
    # 点击劫持保护中间件，用于防止点击劫持攻击
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    #  2.自定中间件
    # 自定义Md1中间件，用于处理自定义的中间件
    'app1.myMiddleware.md1.Md1',
]

# 根 URL 配置文件
ROOT_URLCONF = 'Django5Pro3.urls'

# 模板配置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'environment': 'app1.jinja2_env.environment'
        },
    },
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': [ BASE_DIR / 'app1/templates',BASE_DIR / 'templates'],
        # 谁在前面优先，如果相同，则优先显示前面的
        'DIRS': [BASE_DIR / 'templates', BASE_DIR / 'app1/templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# WSGI 应用文件
WSGI_APPLICATION = 'Django5Pro3.wsgi.application'

# 数据库
# https://docs.djangoproject.com/en/5.1/ref/settings/#databases

# 数据库配置
DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    'default': {
        # 设置Django应用的数据库引擎为MySQL
        'ENGINE': 'django.db.backends.mysql',
        # 指定数据库的名称
        'NAME': 'stu_Management',
        # 配置数据库⽤户名
        'USER': 'root',
        # 配置数据库⽤户密码
        'PASSWORD': 'root123',
        # 指定数据库主机地址
        'HOST': 'localhost',
        # 指定数据库端⼝号
        'PORT': '3306'
    },
    'mysql2': {
        # 设置Django应用的数据库引擎为MySQL
        'ENGINE': 'django.db.backends.mysql',
        # 指定数据库的名称
        'NAME': 'db_shop4',
        # 配置数据库⽤户名
        'USER': 'root',
        # 配置数据库⽤户密码
        'PASSWORD': 'root123',
        # 指定数据库主机地址
        'HOST': 'localhost',
        # 指定数据库端⼝号
        'PORT': '3306'
    }
}

# 密码验证
# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators

# 密码验证规则
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# 国际化
# https://docs.djangoproject.com/en/5.1/topics/i18n/

# 语言代码
LANGUAGE_CODE = 'en-us'
# 时区
TIME_ZONE = 'UTC'
# 启用国际化
USE_I18N = True
# 启用时区支持
USE_TZ = True

# 静态文件（CSS、JavaScript、图像）
# https://docs.djangoproject.com/en/5.1/howto/static-files/

# 静态文件的 URL
STATIC_URL = 'static/'
# STATIC_URL = 'images/'
# 静态文件的目录
STATICFILES_DIRS = [BASE_DIR / 'static', BASE_DIR / 'app1/images']

# 定义媒体文件的URL前缀
MEDIA_URL = 'media/'
# 指定媒体文件在服务器上的绝对路径
MEDIA_ROOT = BASE_DIR / 'media'

# 默认主键字段类型
# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field

# 默认主键字段类型
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
